from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from users.models import UserProfile
import json


@csrf_exempt
@require_http_methods(["POST"])
def register_view(request):
    """
    用户注册接口
    POST /xiangsu/register/
    请求参数: {"username": "用户名", "password": "密码", "email": "邮箱(可选)"}
    """
    try:
        data = json.loads(request.body)
        username = data.get('username')
        password = data.get('password')
        email = data.get('email', '')
        
        # 参数验证
        if not username or not password:
            return JsonResponse({
                'success': False,
                'message': '用户名和密码不能为空'
            }, status=400)
        
        if len(password) < 6:
            return JsonResponse({
                'success': False,
                'message': '密码长度至少为6位'
            }, status=400)
        
        # 检查用户名是否已存在
        if User.objects.filter(username=username).exists():
            return JsonResponse({
                'success': False,
                'message': '用户名已存在'
            }, status=400)
        
        # 创建用户
        user = User.objects.create_user(
            username=username,
            password=password,
            email=email
        )
        
        # 用户扩展信息已经在信号处理器中自动创建，无需手动创建
        # 等待信号处理器完成 UserProfile 的创建
        # 获取自动生成的用户扩展信息
        try:
            profile = user.profile
        except AttributeError:
            # 如果由于某种原因 profile 不存在，则创建一个
            from users.models import UserProfile
            profile = UserProfile.objects.create(user=user)
        
        return JsonResponse({
            'success': True,
            'message': '注册成功',
            'data': {
                'user_id': user.id,
                'username': user.username,
                'email': user.email
            }
        }, status=201)
        
    except json.JSONDecodeError:
        return JsonResponse({
            'success': False,
            'message': '无效的JSON格式'
        }, status=400)
    except Exception as e:
        import traceback
        traceback.print_exc()  # 打印错误堆栈
        return JsonResponse({
            'success': False,
            'message': f'注册失败: {str(e)}'
        }, status=500)


@csrf_exempt
@require_http_methods(["POST"])
def login_view(request):
    """
    用户登录接口
    POST /xiangsu/login/
    请求参数: {"username": "用户名", "password": "密码"}
    """
    try:
        data = json.loads(request.body)
        username = data.get('username')
        password = data.get('password')
        
        # 参数验证
        if not username or not password:
            return JsonResponse({
                'success': False,
                'message': '用户名和密码不能为空'
            }, status=400)
        
        # Django内置认证
        user = authenticate(request, username=username, password=password)
        
        if user is not None:
            # 登录成功
            login(request, user)
            
            return JsonResponse({
                'success': True,
                'message': '登录成功',
                'data': {
                    'user_id': user.id,
                    'username': user.username,
                    'email': user.email,
                    'token': f'session-{user.id}'  # 使用session认证
                }
            }, status=200)
        else:
            return JsonResponse({
                'success': False,
                'message': '用户名或密码错误'
            }, status=401)
            
    except json.JSONDecodeError:
        return JsonResponse({
            'success': False,
            'message': '无效的JSON格式'
        }, status=400)
    except Exception as e:
        return JsonResponse({
            'success': False,
            'message': f'登录失败: {str(e)}'
        }, status=500)


@csrf_exempt
@require_http_methods(["POST"])
def logout_view(request):
    """
    用户登出接口
    POST /xiangsu/logout/
    """
    try:
        logout(request)
        return JsonResponse({
            'success': True,
            'message': '登出成功'
        }, status=200)
    except Exception as e:
        return JsonResponse({
            'success': False,
            'message': f'登出失败: {str(e)}'
        }, status=500)


@require_http_methods(["GET"])
def current_user_view(request):
    """
    获取当前登录用户完整信息（按要求字段顺序）
    GET /xiangsu/current-user/
    """
    if request.user.is_authenticated:
        try:
            profile = request.user.profile
        except UserProfile.DoesNotExist:
            profile = UserProfile.objects.create(user=request.user)
        except Exception as e:
            return JsonResponse({'success': False, 'message': f'获取用户信息失败: {str(e)}'}, status=500)
        user_info = profile.get_user_info()
        return JsonResponse({'success': True, 'data': user_info}, status=200)
    else:
        return JsonResponse({
            'success': False,
            'message': '未登录'
        }, status=401)
